package ar.com.sgsvm.dao.sqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import ar.com.sgsvm.dao.ILocalidadDao;
import ar.com.sgsvm.dao.SqliteDaoFactory;
import ar.com.sgsvm.entity.Localidad;
import ar.com.sgsvm.exceptions.NonexistentEntityException;

public class LocalidadSqliteDao implements ILocalidadDao {

	@Override
	public Long create(Localidad localidad) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("idProvincia", localidad.getProvincia().getIdProvincia());
		contentValues.put("nombre", localidad.getNombre());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		return sqliteDaoFactory.open().insert("Localidad", null, contentValues);
	}

	@Override
	public List<Localidad> readAll() throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("Localidad", null, null, null, null, null, null, null);
		List<Localidad> localidades = new ArrayList<Localidad>();
		if (cursor.moveToFirst()) {
			do {
				Localidad localidad = new Localidad();
				localidad.setIdLocalidad(cursor.getLong(cursor.getColumnIndex("idLocalidad")));
				localidad.setProvincia(sqliteDaoFactory.getProvinciaDao().readById(cursor.getLong(cursor.getColumnIndex("idProvincia"))));
				localidad.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
				localidades.add(localidad);
			} while (cursor.moveToNext());
		}
		cursor.close();
		return localidades;
	}

	@Override
	public Localidad readById(Long idLocalidad) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("Localidad", null, "idLocalidad = ?", new String[] { String.valueOf(idLocalidad) }, null, null, null);
		if (cursor.moveToFirst()) {
			Localidad localidad = new Localidad();
			localidad.setIdLocalidad(idLocalidad);
			localidad.setProvincia(sqliteDaoFactory.getProvinciaDao().readById(cursor.getLong(cursor.getColumnIndex("idProvincia"))));
			localidad.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
			cursor.close();
			return localidad;
		} else {
			throw new NonexistentEntityException("No existe la localidad con id " + String.valueOf(idLocalidad));
		}
	}

	@Override
	public void update(Localidad localidad) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("nombre", localidad.getNombre());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().update("Localidad", contentValues, "idLocalidad = ?", new String[] { String.valueOf(localidad.getIdLocalidad()) });
	}

	@Override
	public void delete(Localidad localidad) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().delete("Localidad", "idLocalidad = ?", new String[] { String.valueOf(localidad.getIdLocalidad()) });
	}

}
